package partTwo;

public class TestInstanceof {
    public static void main(String[] args) {
        //创建多态对象
        Person303 daming = new Daming();
        Person303 tom = new Tom();

        //都可以调用各自重写的继承方法
        daming.play();
        daming.worl();
        tom.worl();
        tom.play();

        //但是无法直接调用子类独有的方法
        //daming.pop();
        //tom.Shopping();

        //此时我们需要将创建的对象进行向下转型后才可以调用子类独有的方法，
        // 但对于daming和tom来说，此时都是Person类型
        //如果此时无法确定子类的对象，那么我们就可以使用 instanceof 来进行判断
        if (tom instanceof  Tom){
            Tom tom2 = (Tom) tom;
            //此时就可以调用自己独有的方法了
            tom2.Shopping();
         }else {
            //显然程序并不会运行到这里，我们只是做一个示例
            Daming daming2 = (Daming) tom;
        }

        if (daming instanceof Daming){
            Daming daming2 = (Daming) daming;
            //此时就可以调用自己独有的方法了
            daming2.Pop();
        }else {
            //显然程序并不会运行到这里，我们只是做一个示例
            Tom tom2 = (Tom) daming;
        }

    }
}


//创建父类
class Person303{
    public void play(){
        System.out.println("Person303:"+"我在玩");
    };
    public void worl(){
        System.out.println("Person303:"+"我在工作");
    };
}


//创建子类
class Daming extends Person303{
    @Override
    public void play() {
        super.play();
    }

    @Override
    public void worl() {
        super.worl();
    }

    //子类独有的方法
    public void Pop(){
        System.out.println("Daming："+"我喜欢Pop");
    }
}

//创建子类
class Tom extends Person303{
    @Override
    public void play() {
        super.play();
    }

    @Override
    public void worl() {
        super.worl();
    }
    //子类独有的方法
    public void Shopping(){
        System.out.println("Daming："+"我喜欢购物");
    }
}